﻿using System;
using System.Collections.Generic;
using JetBrains.Annotations;

namespace MugenMvvmToolkit.Interfaces
{
    /// <summary>
    ///     Represents the validation context.
    /// </summary>
    public interface IValidatorContext : IServiceProvider
    {
        /// <summary>
        ///     Gets the object to validate.
        /// </summary>
        [NotNull]
        object InstanceToValidate { get; }

        /// <summary>
        ///     Gets or sets the validation metadata.
        /// </summary>
        [CanBeNull]
        IDictionary<object, object> ValidationMetadata { get; }

        /// <summary>
        ///     Gets the mapping of model properties.
        /// </summary>
        [NotNull]
        IDictionary<string, ICollection<string>> PropertiesMapping { get; }

        /// <summary>
        ///     Gets the list of properties that will not be validated.
        /// </summary>
        [NotNull]
        ICollection<string> IgnoreProperties { get; }

        /// <summary>
        ///     Gets the service provider.
        /// </summary>
        [CanBeNull]
        IServiceProvider ServiceProvider { get; }
    }
}